#!/bin/bash

# 在当前目录下安装FFmpeg的脚本
# 解决nasm依赖问题和配置选项

# 设置安装目录为当前目录下的install文件夹
INSTALL_DIR="$(pwd)/install"

# 显示帮助信息
show_help() {
    echo "在当前目录下安装FFmpeg的脚本"
    echo "使用方法: ./install_ffmpeg_local.sh [选项]"
    echo "选项:"
    echo "  --install-nasm   安装nasm汇编器（推荐，可获得更好的性能）"
    echo "  --disable-asm    禁用汇编优化（无需安装nasm，但性能可能略差）"
    echo "  --help           显示此帮助信息"
}

# 检查是否有足够的权限
check_permissions() {
    if [ ! -w "$(pwd)" ]; then
        echo "错误: 没有在当前目录下创建文件的权限，请使用sudo或以root用户运行。"
        exit 1
    fi
}

# 安装nasm汇编器
install_nasm() {
    echo "正在安装nasm汇编器..."
    if command -v apt-get &> /dev/null; then
        sudo apt-get update
        sudo apt-get install -y nasm
    elif command -v yum &> /dev/null; then
        sudo yum install -y nasm
    elif command -v brew &> /dev/null; then
        brew install nasm
    else
        echo "警告: 无法自动安装nasm，请手动安装或使用--disable-asm选项。"
        return 1
    fi
    return 0
}

# 配置FFmpeg（启用汇编优化）
configure_with_asm() {
    echo "正在配置FFmpeg（启用汇编优化）..."
    ./configure \n    --prefix="$INSTALL_DIR" \n    --enable-shared \n    --disable-static \n    --enable-gpl \n    --enable-version3 \n    --enable-nonfree
}

# 配置FFmpeg（禁用汇编优化）
configure_without_asm() {
    echo "正在配置FFmpeg（禁用汇编优化）..."
    ./configure \n    --prefix="$INSTALL_DIR" \n    --enable-shared \n    --disable-static \n    --enable-gpl \n    --enable-version3 \n    --enable-nonfree \n    --disable-x86asm
}

# 编译并安装FFmpeg
compile_and_install() {
    echo "正在编译FFmpeg..."
    make -j$(nproc)
    if [ $? -ne 0 ]; then
        echo "错误: FFmpeg编译失败!"
        exit 1
    fi
    
    echo "正在安装FFmpeg到$INSTALL_DIR..."
    make install
    if [ $? -ne 0 ]; then
        echo "错误: FFmpeg安装失败!"
        exit 1
    fi
}

# 显示安装成功信息和使用指南
show_success_info() {
    echo "\nFFmpeg已成功安装到$INSTALL_DIR!"
    echo "\n使用指南:"
    echo "1. 要使用安装的FFmpeg，需要设置环境变量:"
    echo "   export PATH=\"$INSTALL_DIR/bin:\$PATH\""
    echo "   export LD_LIBRARY_PATH=\"$INSTALL_DIR/lib:\$LD_LIBRARY_PATH\""
    echo ""
    echo "2. 可以将这些命令添加到~/.bashrc或~/.profile文件中，使其永久生效"
    echo ""
    echo "3. 验证安装:"
    echo "   source ~/.bashrc  # 或者重新打开终端"
    echo "   ffmpeg -version"
    echo ""
    echo "4. 编译使用该FFmpeg的程序时，需要指定头文件和库文件路径:"
    echo "   export FFMPEG_INCLUDE_PATH=\"$INSTALL_DIR/include\""
    echo "   export FFMPEG_LIB_PATH=\"$INSTALL_DIR/lib\""
    echo "   然后运行make命令"
}

# 主函数
main() {
    # 检查参数
    if [ "$#" -eq 0 ]; then
        show_help
        exit 0
    fi
    
    # 处理参数
    case "$1" in
        --install-nasm)
            check_permissions
            install_nasm
            if [ $? -eq 0 ]; then
                configure_with_asm
                if [ $? -eq 0 ]; then
                    compile_and_install
                    show_success_info
                else
                    echo "错误: FFmpeg配置失败，请检查错误信息。"
                    exit 1
                fi
            else
                echo "警告: nasm安装失败，尝试禁用汇编优化..."
                configure_without_asm
                if [ $? -eq 0 ]; then
                    compile_and_install
                    show_success_info
                else
                    echo "错误: FFmpeg配置失败，请检查错误信息。"
                    exit 1
                fi
            fi
            ;;
        --disable-asm)
            check_permissions
            configure_without_asm
            if [ $? -eq 0 ]; then
                compile_and_install
                show_success_info
            else
                echo "错误: FFmpeg配置失败，请检查错误信息。"
                exit 1
            fi
            ;;
        --help)
            show_help
            ;;
        *)
            echo "未知选项: $1"
            show_help
            exit 1
            ;;
    esac
}

# 运行主函数
main "$@"